<?php
/**
  * IBD - Projet Helvetia - 2009
  *
  * Alexandre DOS SANTOS COELHO
  * Mathieu RICHARD
  * Karim EL-ALAILI
  * Julien REBETEZ
  *
  */

/**
 * Controlleur gerant les utilisateurs
 * @package controlleurs
 */
class UsersController extends AppController
{
  var $name = 'Users';

  /**
   * Index des utilisateurs, affiche la liste des utilisateurs
   * @see views/users/admin_index.ctp
   */
  function admin_index ()
  {
    $this->__requiresSuperAdmin();

    $this->set('users', $this->User->findAll());
  }

  /**
   * Retourne un array contenant les groups disponibles 
   * sous une forme acceptable pour un $html->select 
   * c'est a dire array('id' => 'nom')
   * @return un array des groupes disponibles
   */
  function __getGroupSelect ()
  {
      $group_array = array();
      $groups = $this->User->Group->findAll();
      foreach ($groups as $g)
        $group_array[$g['Group']['id']] = $g['Group']['name'];
      return $group_array;
  }

  /**
   * Ajout d'un utilisateur
   * @see views/users/admin_add.ctp
   */
  function admin_add () 
  {
    $this->__requiresSuperAdmin();

    if (!empty($this->data['User'])) {
      if ($this->User->save($this->data)) {
        $this->flashRedirect('Utilisateur ajouté', '/admin/users');
      } else {
        $this->flash("Erreur lors de la validation<br /> Veuillez corriger");
      }
    }

    $this->set('groups', $this->__getGroupSelect());
  }

  /**
   * Edition d'un utilisateur
   * @see views/users/admin_edit.ctp
   */
  function admin_edit ($id = null)
  {
    global $VIEWS; 

    $this->__requiresSuperAdmin();

    $this->User->id = $id;

    if (!empty($this->data['User'])) {
      if ($this->User->save($this->data) ) {
        $this->flashRedirect('Utilisateur edite', '/admin/users');
      } else {
        $this->flash("Erreur lors de la validation<br /> Veuillez corriger");
      }
    }

    //On sauvegarde les erreurs de validation et on restaure apres 
    //le read, sans quoi on les perds
    $errors = $this->User->validationErrors;
    $this->data = $this->User->read();
    $this->User->validationErrors = $errors;

    $this->set('groups', $this->__getGroupSelect());
    $this->render("/$VIEWS/users/admin_add");
  }

  /**
   * Suppression d'un utilisateur
   * @see views/users/admin_delete.ctp
   */
  function admin_delete ($id = null)
  {
    $this->__requiresSuperAdmin();

    $this->User->del($id);
    $this->flashRedirect('Utilisateur supprimé', '/admin/users');
  }

  function __requiresSuperAdmin ()
  {
    if ($this->Session->check('User') &&
        $this->Session->read('Group') == 'superadmin') {
      return;
    }

    $this->flashRedirect('Cette opération requiert des privilièges superadmin', '/admin/users'); 
  }

  /**
   * Login d'un utilisateur
   * @see views/users/login.ctp
   */
  function login ()
  {
    if (!empty($this->data)) {
      if (($user = $this->User->validateLogin($this->data['User'])) == true) {
        $this->Session->write('User', $user);
        $this->User->id = $user['id'];
        $this->data = $this->User->read();
        $this->Session->write('Group', $this->data['Group']['name']);
        $this->flashRedirect('Authentification réussie', '/');
      } else {
        $this->flashRedirect('Echec de l\'authentification, veuillez réessayer', 'login');
      }
    }
  }

  /**
   * Logout d'un utilisateur
   * @see views/users/logout.ctp
   */
  function logout () 
  {
    $this->Session->destroy('User');
    $this->flashRedirect('Au revoir', '/');
  }
}

?>
